home *** CD-ROM | disk | FTP | other *** search
/ Languguage OS 2 / Languguage OS II Version 10-94 (Knowledge Media)(1994).ISO / language / parallax / mac_sit.hqx / Parallaxis 2.11 / matrix.z < prev    next >
Text File  |  1992-01-09  |  5KB  |  166 lines

  1. START
  2. 100 PE
  3. 4 PORTS
  4. SCALAR     I2 3( 10( R10 ) ) I4
  5. VECTOR     I2
  6.     1  :    GOTO 73;
  7.     2  :    PROC 1 VECTOR I1;
  8.         POPV VI1:1;
  9.         VI[VI1:1] := 0;
  10.         PUSHV VI1:1;
  11.         RETURN;
  12.     3  :    PROC 1;
  13.         ERROR "value out of range";
  14.         RETURN;
  15.     4  :    PROC 1
  16.         SCALAR    
  17.         VECTOR     I3 I1; group number 1
  18.         PUSHV ADDR VI1:3;
  19.     5  :    VI1:1 := ID - 1; for GRID calculating DIMi
  20.         VI1:2 := VI1:1 MOD 10;      DIM2
  21.         VI1:1 := VI1:1 / 10;      DIM1
  22.     6  :    VI1:3 := VI1:1 * 10;
  23.     7  :    VI1:4 := VI1:2 - 1;
  24.     8  :    VI1:4 := VI1:4 MOD 10;
  25.     9  :    VI1:3 := VI1:3 + VI1:4;
  26.         VI1:3 := VI1:3 + 1;
  27.         IF VI1:1 < 0 CALL 2;
  28.         IF VI1:1 > 9 CALL 2;
  29.         IF VI1:4 < 0 CALL 2;
  30.         IF VI1:4 > 9 CALL 2;
  31.         CONNECT 1 TO 1 AT VI1:3;
  32.    10  :    VI1:4 := VI1:1 - 1;
  33.    11  :    VI1:4 := VI1:4 MOD 10;
  34.    12  :    VI1:3 := VI1:4 * 10;
  35.    13  :    VI1:3 := VI1:3 + VI1:2;
  36.         VI1:3 := VI1:3 + 1;
  37.         IF VI1:4 < 0 CALL 2;
  38.         IF VI1:4 > 9 CALL 2;
  39.         IF VI1:2 < 0 CALL 2;
  40.         IF VI1:2 > 9 CALL 2;
  41.         CONNECT 2 TO 2 AT VI1:3;
  42.    14  :    VI1:3 := VI1:1 * 10;
  43.    15  :    VI1:4 := VI1:2 - VI1:1;
  44.    16  :    VI1:4 := VI1:4 MOD 10;
  45.    17  :    VI1:3 := VI1:3 + VI1:4;
  46.         VI1:3 := VI1:3 + 1;
  47.         IF VI1:1 < 0 CALL 2;
  48.         IF VI1:1 > 9 CALL 2;
  49.         IF VI1:4 < 0 CALL 2;
  50.         IF VI1:4 > 9 CALL 2;
  51.         CONNECT 3 TO 3 AT VI1:3;
  52.    18  :    VI1:4 := VI1:1 - VI1:2;
  53.    19  :    VI1:4 := VI1:4 MOD 10;
  54.    20  :    VI1:3 := VI1:4 * 10;
  55.    21  :    VI1:3 := VI1:3 + VI1:2;
  56.         VI1:3 := VI1:3 + 1;
  57.         IF VI1:4 < 0 CALL 2;
  58.         IF VI1:4 > 9 CALL 2;
  59.         IF VI1:2 < 0 CALL 2;
  60.         IF VI1:2 > 9 CALL 2;
  61.         CONNECT 4 TO 4 AT VI1:3;
  62.    22  :    POPV VI1:3;
  63.    23  :    RETURN;    group number : 1
  64.    24  :    PROC 1;    configuration : GRID
  65.         VI0:1 := ID - 1; for GRID calculating DIMi
  66.         VI0:2 := VI0:1 MOD 10;      DIM2
  67.         VI0:1 := VI0:1 / 10;      DIM1
  68.         RETURN;    configuration : GRID
  69.    25  :    PROC 1 
  70.         SCALAR     I3 I1 I1
  71.         VECTOR     R3 R1    ;     MATRIX_MULT
  72.    26!16  :    POPS SI1:3;
  73.    27  :    POPS SI1:2;
  74.    28  :    POPS SI1:1;
  75.    29!21  :    CALL 24; line 21 column 2 
  76.    30  :    LOAD VR1:1 WITH SR[SI1:1];
  77.    31!22  :    LOAD VR1:2 WITH SR[SI1:2]; line 22 column 2 
  78.    32!23  :    CALL 24; line 23 column 2 
  79.    33!24  :    PROPAGATE VR1:1 OUT 3 IN 3; line 24 column 4 
  80.    34!25  :    PROPAGATE VR1:2 OUT 4 IN 4; line 25 column 4 
  81.    35!26  :    VR1:3 := VR1:1 * VR1:2; line 26 column 4 
  82.    36!27  :    SI1:4 := 2; line 27 column 4 
  83.    37  :    SI1:5 := 10;
  84.    38!27  :    IF SI1:4 > SI1:5 GOTO 45; line 27 column 4 
  85.    39!28  :    PROPAGATE VR1:1 OUT 1 IN 1; line 28 column 6 
  86.    40!29  :    PROPAGATE VR1:2 OUT 2 IN 2; line 29 column 6 
  87.    41!30  :    VR1:4 := VR1:1 * VR1:2; line 30 column 6 
  88.    42  :    VR1:3 := VR1:3 + VR1:4;
  89.    43  :    SI1:4 := SI1:4 + 1;
  90.    44  :    GOTO 38;
  91.    45!33  :    CALL 24; line 33 column 2 
  92.    46  :    STORE VR1:3 TO SR[SI1:3];
  93.    47!34  :    RETURN;     MATRIX_MULT
  94.    48  :    PROC 1 
  95.         SCALAR     I1 I2 I4    ;     OUT
  96.    49!37  :    POPS SI1:1;
  97.    50!40  :    SI1:2 := 1; line 40 column 2 
  98.    51  :    SI1:4 := 10;
  99.    52!40  :    IF SI1:2 > SI1:4 GOTO 71; line 40 column 2 
  100.    53!41  :    SI1:3 := 1; line 41 column 4 
  101.    54  :    SI1:5 := 10;
  102.    55!41  :    IF SI1:3 > SI1:5 GOTO 68; line 41 column 4 
  103.    56!41  :    IF SI1:2 < 1 CALL 3; line 41 column 23 
  104.    57  :    IF 10 < SI1:2 CALL 3;
  105.    58  :    IF SI1:3 < 1 CALL 3;
  106.    59  :    IF 10 < SI1:3 CALL 3;
  107.    60  :    SI1:6 := SI1:1 - SIZE( R10 R1 );
  108.    61  :    SI1:7 := SI1:3 * SIZE( R1 );
  109.    62  :    SI1:6 := SI1:6 + SI1:7;
  110.    63  :    SI1:7 := SI1:2 * SIZE( R10 );
  111.    64  :    SI1:6 := SI1:6 + SI1:7;
  112.    65  :    WRITE SR[SI1:6] 10 2;
  113.    66  :    SI1:3 := SI1:3 + 1;
  114.    67  :    GOTO 55;
  115.    68!42  :    WRITE EOL; line 42 column 4 
  116.    69  :    SI1:2 := SI1:2 + 1;
  117.    70  :    GOTO 52;
  118.    71!44  :    WRITE EOL; line 44 column 2 
  119.    72!45  :    RETURN;     OUT
  120.    73  :    CALL 4;    connections
  121.    74!49  :    SI0:1 := 1; line 49 column 2 
  122.    75  :    SI0:3 := 10;
  123.    76!49  :    IF SI0:1 > SI0:3 GOTO 107; line 49 column 2 
  124.    77!50  :    SI0:2 := 1; line 50 column 4 
  125.    78  :    SI0:4 := 10;
  126.    79!50  :    IF SI0:2 > SI0:4 GOTO 105; line 50 column 4 
  127.    80!51  :    IF SI0:1 < 1 CALL 3; line 51 column 6 
  128.    81  :    IF 10 < SI0:1 CALL 3;
  129.    82  :    IF SI0:2 < 1 CALL 3;
  130.    83  :    IF 10 < SI0:2 CALL 3;
  131.    84  :    SI0:5 := ADDR SR0:1 - SIZE( R10 R1 );
  132.    85  :    SI0:6 := SI0:2 * SIZE( R1 );
  133.    86  :    SI0:5 := SI0:5 + SI0:6;
  134.    87  :    SI0:6 := SI0:1 * SIZE( R10 );
  135.    88  :    SI0:5 := SI0:5 + SI0:6;
  136.    89  :    SI0:6 := 10 * SI0:1;
  137.    90  :    SI0:6 := SI0:6 + SI0:2;
  138.    91  :    SR[SI0:5] := SI0:6;
  139.    92!52  :    IF SI0:1 < 1 CALL 3; line 52 column 6 
  140.    93  :    IF 10 < SI0:1 CALL 3;
  141.    94  :    IF SI0:2 < 1 CALL 3;
  142.    95  :    IF 10 < SI0:2 CALL 3;
  143.    96  :    SI0:5 := ADDR SR0:101 - SIZE( R10 R1 );
  144.    97  :    SI0:6 := SI0:2 * SIZE( R1 );
  145.    98  :    SI0:5 := SI0:5 + SI0:6;
  146.    99  :    SI0:6 := SI0:1 * SIZE( R10 );
  147.   100  :    SI0:5 := SI0:5 + SI0:6;
  148.   101  :    SI0:6 := SI0:1 + SI0:2;
  149.   102  :    SR[SI0:5] := SI0:6;
  150.   103  :    SI0:2 := SI0:2 + 1;
  151.   104  :    GOTO 79;
  152.   105  :    SI0:1 := SI0:1 + 1;
  153.   106  :    GOTO 76;
  154.   107!55  :    PUSHS ADDR SR0:1; line 55 column 2 
  155.   108  :    CALL 48; OUT
  156.   109!55  :    PUSHS ADDR SR0:101; line 55 column 10 
  157.   110  :    CALL 48; OUT
  158.   111!56  :    PUSHS ADDR SR0:1; line 56 column 2 
  159.   112  :    PUSHS ADDR SR0:101;
  160.   113  :    PUSHS ADDR SR0:201;
  161.   114  :    CALL 25; MATRIX_MULT
  162.   115!57  :    PUSHS ADDR SR0:201; line 57 column 2 
  163.   116  :    CALL 48; OUT
  164.   117  :    END;    SYSTOLIC_ARRAY
  165. STOP
  166.